<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Concurrent Pascal</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Concurrent_Pascal"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Concurrent_Pascal rootpage-Concurrent_Pascal skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Concurrent Pascal</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1295905060">
/* start https://en.wikipedia.org/ */
.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}
/* end https://en.wikipedia.org/ */
</style><table class="infobox vevent"><tbody><tr><th colspan="2" class="infobox-above" style="background-color:#e0e0e0;">Concurrent Pascal</th></tr><tr><th scope="row" class="infobox-label"><a href="Programming_paradigm" title="Programming paradigm">Paradigms</a></th><td class="infobox-data"><a href="Imperative_programming" title="Imperative programming">Imperative</a>, <a href="Structured_programming" title="Structured programming">structured</a>, <a href="Concurrent_computing" title="Concurrent computing">concurrent</a></td></tr><tr><th scope="row" class="infobox-label">Family</th><td class="infobox-data"><a href="Niklaus_Wirth" title="Niklaus Wirth">Wirth</a> <a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Software_design" title="Software design">Designed by</a></th><td class="infobox-data"><a href="Per_Brinch_Hansen" title="Per Brinch Hansen">Per Brinch Hansen</a></td></tr><tr><th scope="row" class="infobox-label">First appeared</th><td class="infobox-data">April 1974<span style="display:none"> (<span class="bday dtstart published updated">1974-04</span>)</span></td></tr><tr><th scope="row" class="infobox-label"><a href="Type_system" title="Type system">Typing discipline</a></th><td class="infobox-data"><a href="Type_system" title="Type system">Static and dynamic</a>, <a href="Type_system#Strong_and_weak_typing" title="Type system">strong</a>, <a href="Type_system#Safely_and_unsafely_typed_systems" title="Type system">safe</a></td></tr><tr><th scope="row" class="infobox-label"><a href="Computing_platform" title="Computing platform">Platform</a></th><td class="infobox-data"><a href="Digital_Equipment_Corporation" title="Digital Equipment Corporation">DEC</a> <a href="PDP_11" class="mw-redirect" title="PDP 11">PDP 11</a></td></tr><tr><th colspan="2" class="infobox-header" style="background-color: #EEEEEE;">Influenced by</th></tr><tr><td colspan="2" class="infobox-full-data"><a href="ALGOL_60" title="ALGOL 60">ALGOL 60</a>, <a href="Simula" title="Simula">Simula</a> 67, <a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a></td></tr></tbody></table>
<p><b>Concurrent Pascal</b> is a <a href="Programming_language" title="Programming language">programming language</a> designed by <a href="Per_Brinch_Hansen" title="Per Brinch Hansen">Per Brinch Hansen</a> for writing <a href="Concurrent_computing" title="Concurrent computing">concurrent computing</a> programs such as <a href="Operating_system" title="Operating system">operating systems</a> and <a href="Real-time_computing" title="Real-time computing">real-time computing</a> monitoring systems on <a href="Shared_memory" title="Shared memory">shared memory</a> computers.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>A separate language, <i>Sequential Pascal</i>, is used as the language for applications programs run by the operating systems written in Concurrent Pascal. Both languages are extensions of <a href="Niklaus_Wirth" title="Niklaus Wirth">Niklaus Wirth</a>'s <a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a>, and share a common threaded code <a href="Interpreter_(computing)" title="Interpreter (computing)">interpreter</a>.<sup id="cite_ref-:0_2-0" class="reference"><a href="#cite_note-:0-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> The following describes how Concurrent Pascal differs from Wirth's Pascal.
</p>
<div class="mw-heading mw-heading2"><h2 id="Language_description">Language description</h2></div>
<p>Several constructs in Pascal were removed from Concurrent Pascal for simplicity and security:<sup id="cite_ref-:0_2-1" class="reference"><a href="#cite_note-:0-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>Variant records</li>
<li><a href="Goto" title="Goto">Goto</a> statement, and labels</li>
<li><a href="Subroutine" class="mw-redirect" title="Subroutine">Procedures as parameters</a></li>
<li><a href="Data_structure_alignment" title="Data structure alignment">Packed arrays</a></li>
<li><a href="Pointer_(computer_programming)" title="Pointer (computer programming)">Pointer types</a></li>
<li>File types, and associated standard <a href="Input/output" title="Input/output">input/output</a> procedures</li></ul>
<p>These omissions make it possible to guarantee, by a combination of compile-time checks and minimal run-time checking in the threaded-code interpreter, that a program can not damage itself or another program by addressing outside its allotted space.
</p><p>Concurrent Pascal includes class, monitor, and process data types. Instances of these types are declared as variables, and initialized in an <code><a href="Init" title="Init">init</a></code> statement.
</p><p>Classes and monitors are similar: both package private variables and procedures with public procedures (called procedure entries). A class instance can be used by only one process, whereas a monitor instance may be shared by processes. Monitors provide the only mechanism for interprocess communication in a Concurrent Pascal program.
</p><p>Only one process can execute within a given monitor instance at a time. A built in data type, the queue, together with operations <code>delay</code> and <code>continue</code>, are used for scheduling within monitors. Each variable of type queue can hold one process. If many processes are to be delayed in a monitor, multiple queue variables, usually organized as an array, must be provided. The single process queue variable gives a monitor full control over medium-term scheduling, but the programmer is responsible for unblocking the correct process.
</p><p>A process, like a class or monitor, has local variables, procedures, and an initial statement, but has no procedure entries. The initial statement ordinarily executes forever, calling local procedures, class procedures, and monitor procedures. Processes communicate through monitor procedures. Language rules prevent deadlock by imposing a hierarchy on monitors. But nothing can prevent a monitor from erroneously forgetting to unblock a delayed process (by not calling continue) so the system can still effectively hang up through programming errors.
</p><p>The configuration of processes, monitors, and classes in a Concurrent Pascal program is normally established at the start of execution, and is not changed thereafter. The communication paths between these components are established by variables passed in the <code>init</code> statements, since class and monitor instance variables cannot be used as procedure parameters.
</p>
<div class="mw-heading mw-heading2"><h2 id="Example">Example</h2></div>
<p>The following example shows the declaration of a simple monitor, and its use by two communicating processes.
</p>
<div class="mw-highlight mw-highlight-lang-componentpascal mw-content-ltr" dir="ltr"><pre><span class="n">type</span>
<span class="s">"Bounded buffer monitor"</span>
<span class="n">buffer</span> <span class="o">=</span> <span class="n">Monitor</span>
<span class="n">var</span>
<span class="n">saved</span> <span class="p">:</span> <span class="n">Integer</span><span class="p">;</span> <span class="s">"saved item is an integer"</span>
<span class="n">fullq</span><span class="p">,</span> <span class="n">emptyq</span> <span class="p">:</span> <span class="n">Queue</span><span class="p">;</span> <span class="s">"used by only two processes"</span>
<span class="n">full</span> <span class="p">:</span> <span class="n">Boolean</span><span class="p">;</span> <span class="s">"true if an item is saved:"</span>
<span class="s">"Puts item in buffer"</span>
<span class="n">procedure</span> <span class="n">entry</span> <span class="n">put</span><span class="p">(</span><span class="n">item</span> <span class="p">:</span> <span class="n">Integer</span><span class="p">);</span>
<span class="n">begin</span>
<span class="n">if</span> <span class="n">full</span> <span class="n">then</span>
<span class="n">delay</span><span class="p">(</span><span class="n">fullq</span><span class="p">);</span> <span class="s">"block if full"</span>
<span class="n">saved</span> <span class="p">:</span><span class="o">=</span> <span class="n">item</span><span class="p">;</span> <span class="s">"save the item"</span>
<span class="n">full</span> <span class="p">:</span><span class="o">=</span> <span class="n">true</span><span class="p">;</span> <span class="s">"mark as full"</span>
<span class="n">continue</span><span class="p">(</span><span class="n">emptyq</span><span class="p">)</span> <span class="s">"unblock consumer"</span>
<span class="n">end</span><span class="p">;</span>
<span class="s">"Gets item from the buffer"</span>
<span class="n">procedure</span> <span class="n">entry</span> <span class="n">get</span><span class="p">(</span><span class="n">var</span> <span class="n">item</span> <span class="p">:</span> <span class="n">Integer</span><span class="p">);</span>
<span class="n">begin</span>
<span class="n">if</span> <span class="n">not</span> <span class="n">full</span> <span class="n">then</span>
<span class="n">delay</span><span class="p">(</span><span class="n">emptyq</span><span class="p">);</span> <span class="s">"block if empty"</span>
<span class="n">item</span> <span class="p">:</span><span class="o">=</span> <span class="n">saved</span><span class="p">;</span> <span class="s">"get the item"</span>
<span class="n">full</span> <span class="p">:</span><span class="o">=</span> <span class="n">false</span><span class="p">;</span> <span class="s">"mark as not full"</span>
<span class="n">continue</span><span class="p">(</span><span class="n">fullq</span><span class="p">)</span> <span class="s">"unblock producer"</span>
<span class="n">end</span><span class="p">;</span>
<span class="s">"Initialize the monitor"</span>
<span class="n">begin</span>
<span class="n">full</span> <span class="p">:</span><span class="o">=</span> <span class="n">false</span>
<span class="n">end</span><span class="p">;</span>
<span class="s">"Producer uses a buffer"</span>
<span class="n">producer</span> <span class="o">=</span> <span class="n">process</span><span class="p">(</span><span class="n">pass</span> <span class="p">:</span> <span class="n">Buffer</span><span class="p">);</span>
<span class="n">var</span> <span class="n">item</span> <span class="p">:</span> <span class="n">Integer</span><span class="p">;</span>
<span class="n">begin</span>
<span class="n">cycle</span> <span class="s">"execute in a loop forever"</span>
<span class="s">"produce an item"</span>
<span class="n">pass</span><span class="p">.</span><span class="n">put</span><span class="p">(</span><span class="n">item</span><span class="p">)</span> <span class="s">"pass an item to the monitor"</span>
<span class="n">end</span>
<span class="n">end</span><span class="p">;</span>
<span class="s">"Consumer uses a buffer"</span>
<span class="n">consumer</span> <span class="o">=</span> <span class="n">process</span><span class="p">(</span><span class="n">pass</span> <span class="p">:</span> <span class="n">Buffer</span><span class="p">);</span>
<span class="n">var</span> <span class="n">item</span> <span class="p">:</span> <span class="n">Integer</span><span class="p">;</span>
<span class="n">begin</span>
<span class="n">cycle</span>
<span class="n">pass</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="n">item</span><span class="p">);</span> <span class="s">"get an item from the monitor"</span>
<span class="s">"consume the item"</span>
<span class="n">end</span>
<span class="n">end</span><span class="p">;</span>
<span class="s">"declare instances of the monitor, producer, and consumer"</span>
<span class="s">"give the producer and consumer access to the monitor"</span>
<span class="n">var</span>
<span class="n">pass</span> <span class="p">:</span> <span class="n">Buffer</span><span class="p">;</span>
<span class="n">prod</span> <span class="p">:</span> <span class="n">Producer</span><span class="p">;</span>
<span class="n">cons</span> <span class="p">:</span> <span class="n">Consumer</span><span class="p">;</span>
<span class="n">begin</span>
<span class="n">init</span> <span class="n">pass</span><span class="p">,</span> <span class="s">"initialize the monitor"</span>
<span class="n">prod</span><span class="p">(</span><span class="n">pass</span><span class="p">),</span> <span class="s">"start the producer process"</span>
<span class="n">cons</span><span class="p">(</span><span class="n">pass</span><span class="p">)</span> <span class="s">"start the consumer process"</span>
<span class="n">end</span><span class="p">.</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFBrinch_Hansen1975" class="citation journal cs1">Brinch Hansen, Per (June 1975). <a rel="nofollow" class="external text" href="http://brinch-hansen.net/papers/1975a.pdf">"The programming language Concurrent Pascal"</a> <span class="cs1-format">(PDF)</span>. <i>IEEE Transactions on Software Engineering</i> (2): <span class="nowrap">199–</span>207. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1109%2Ftse.1975.6312840">10.1109/tse.1975.6312840</a>.</cite></span>
</li>
<li id="cite_note-:0-2"><span class="mw-cite-backlink">^ <a href="#cite_ref-:0_2-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:0_2-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFBrinch_Hansen1977" class="citation book cs1">Brinch Hansen, Per (1977). <i>The Architecture of Concurrent Programs</i>. Prentice Hall. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0-13-044628-2</bdi>.</cite></span>
</li>
</ol></div></div>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r886047488">
/* start https://en.wikipedia.org/ */
.mw-parser-output .nobold{font-weight:normal}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Pascal_programming_language_family576" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="3"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div id="Pascal_programming_language_family576" style="font-size:114%;margin:0 4em"><a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal programming language</a> family</div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Programming_language#Dialects,_flavors_and_implementations" title="Programming language">Dialects</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a></li>
<li><a href="Object_Pascal" title="Object Pascal">Object Pascal</a></li>
<li><a href="Pascal_Script" title="Pascal Script">Pascal Script</a></li>
<li><a href="Oxygene_(programming_language)" title="Oxygene (programming language)">Oxygene</a></li>
<li><a href="Clascal" title="Clascal">Clascal</a></li>
<li><a href="Joyce_(programming_language)" title="Joyce (programming language)">Joyce</a></li>
<li><a href="SuperPascal" title="SuperPascal">SuperPascal</a></li></ul>
</div></td><td class="noviewer navbox-image" rowspan="6" style="width:1px;padding:0 0 0 2px"><div><span typeof="mw:File"></span></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Compiler" title="Compiler">Compilers</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Current</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Delphi_(software)" title="Delphi (software)">Delphi</a> (<a href="History_of_Delphi_(software)" title="History of Delphi (software)">history</a>)</li>
<li><a href="Oxygene_(programming_language)" title="Oxygene (programming language)">Oxygene</a></li>
<li><a href="Pascal_(programming_language)#Compilers_and_interpreters" title="Pascal (programming language)">VSI Pascal</a></li>
<li><a href="IP_Pascal" title="IP Pascal">IP Pascal</a></li>
<li><a href="Free_Pascal" title="Free Pascal">Free Pascal</a> (<a href="Lazarus_(software)" title="Lazarus (software)">Lazarus</a>)</li>
<li><a href="PascalABC.NET" title="PascalABC.NET">PascalABC.NET</a></li>
<li><a href="GNU_Pascal" title="GNU Pascal">GNU Pascal</a></li>
<li><a href="Turbo51" title="Turbo51">Turbo51</a></li>
<li><a href="Pic_Micro_Pascal" title="Pic Micro Pascal">Pic Micro Pascal</a></li>
<li><a href="Amsterdam_Compiler_Kit" title="Amsterdam Compiler Kit">ACK</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Discontinued</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Virtual_Pascal" title="Virtual Pascal">Virtual Pascal</a></li>
<li><a href="Apple_Pascal" title="Apple Pascal">Apple Pascal</a></li>
<li><a href="Borland_Kylix" title="Borland Kylix">Borland Kylix</a></li>
<li><a href="Turbo_Pascal" title="Turbo Pascal">Turbo Pascal</a></li>
<li><a href="Microsoft_Pascal" title="Microsoft Pascal">Microsoft Pascal</a></li>
<li><a href="UCSD_Pascal" title="UCSD Pascal">UCSD Pascal</a></li>
<li><a href="JRT_Pascal" title="JRT Pascal">JRT Pascal</a></li>
<li><a href="Pascal/MT%2B" title="Pascal/MT+">Pascal/MT+</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="API" title="API">API</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Component_Library_for_Cross_Platform" title="Component Library for Cross Platform">CLX</a></li>
<li><a href="Free_Component_Library" title="Free Component Library">FCL</a></li>
<li><a href="FireMonkey" title="FireMonkey">FireMonkey</a></li>
<li><a href="Lazarus_Component_Library" title="Lazarus Component Library">LCL</a></li>
<li><a href="Object_Windows_Library" title="Object Windows Library">Object Windows Library</a></li>
<li><a href="OpenWire_(library)" title="OpenWire (library)">OpenWire</a></li>
<li><a href="Free_Pascal_Runtime_Library" title="Free Pascal Runtime Library">RTL</a></li>
<li><a href="Turbo_Vision" title="Turbo Vision">Turbo Vision</a></li>
<li><a href="Visual_Component_Library" title="Visual Component Library">Visual Component Library</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Microcomputer" title="Microcomputer">Microcomputer</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Pascal_MicroEngine" title="Pascal MicroEngine">Pascal MicroEngine</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="Comparison_of_programming_languages" title="Comparison of programming languages">Comparisons</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Comparison_of_Pascal_and_C" title="Comparison of Pascal and C">Pascal and C</a></li>
<li><a href="Comparison_of_Pascal_and_Delphi" title="Comparison of Pascal and Delphi">Pascal and Delphi</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Designer</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Niklaus_Wirth" title="Niklaus Wirth">Niklaus Wirth</a></li></ul>
</div></td></tr><tr><td class="navbox-abovebelow" colspan="3"><div>
<ul><li><a href="Generic_programming#Genericity_in_Pascal" title="Generic programming">Genericity</a></li></ul>
<dl><dt><span class="nobold">Related to</span></dt>
<dd><a href="ALGOL" title="ALGOL">ALGOL</a> (1958)</dd>
<dd><a href="Modula-2" title="Modula-2">Modula-2</a> (1977)</dd>
<dd><a href="Ada_(programming_language)" title="Ada (programming language)">Ada</a> (1983)</dd>
<dd><a href="Oberon_(programming_language)" title="Oberon (programming language)">Oberon</a> (1986)</dd>
<dd><a href="Modula-3" title="Modula-3">Modula-3</a> (1988)</dd>
<dd><a href="Oberon-2" title="Oberon-2">Oberon-2</a> (1991)</dd>
<dd><a href="Component_Pascal" title="Component Pascal">Component Pascal</a> (1991)</dd></dl>
</div></td></tr></tbody></table></div>
<div class="navbox-styles"></div><div role="navigation" class="navbox authority-control" aria-labelledby="Authority_control_databases_frameless&#124;text-top&#124;10px&#124;alt=Edit_this_at_Wikidata&#124;link=https&#58;//www.wikidata.org/wiki/Q5159102#identifiers&#124;class=noprint&#124;Edit_this_at_Wikidata645" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Authority_control_databases_frameless&#124;text-top&#124;10px&#124;alt=Edit_this_at_Wikidata&#124;link=https&#58;//www.wikidata.org/wiki/Q5159102#identifiers&#124;class=noprint&#124;Edit_this_at_Wikidata645" style="font-size:114%;margin:0 4em">Authority control databases </div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">National</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh85030755">United States</a></span></li><li><span class="uid"><a rel="nofollow" class="external text" href="https://www.nli.org.il/en/authorities/987007553042905171">Israel</a></span></li></ul></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"><ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://lux.collections.yale.edu/view/concept/46edb6e7-d6f9-4a63-84ce-d6aa307f2229">Yale LUX</a></span></li></ul></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2022-04-28" href="https://en.wikipedia.org/wiki/?title=Concurrent_Pascal&oldid=1085060772">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>